This wind analysis was inspired by Munch and Conover (2000), who found a correlation between wind speed and coastwide YOY index. The wind measurements used are described below:
The NOAA environmental buoy array provided environmental data from 1970 to 1992. Buoys collected hourly records of windspeed and wind direction at a height of 10 m, and surface temperature at a depth of 1.5 m. Data were examined from a total of 34 buoys in fixed locations throughout the region from Cape Fear to the Gulf of Maine and extending from nearshore to beyond the shelf break. Buoy locations are reported in Munch (1997).
Spring-spawned YOY were apparently characterized as fish between 13-27cm in length in the autumn bottom trawl, but “A complete set of length-frequency distributions and cohort designations is presented in Munch (1997)”.
And the observed correlation is described:
A strong relationship existed between offshore wind and recruitment. Using north (n) and east (e) windstress components from NOAA buoys near the edge of the shelf of the Mid-Atlantic Bight, the model ln(c.p.u.e.) = -16.5 n - 12.8 e + 0.59 (p<0.05) explained 36% of the variance in spring cohort abundance in the SNE region
I am trying to obtain a copy of Munch (1997), which is a master’s thesis (Munch, S. B. 1997. Recruitment Dynamics of Bluefish, Pomatonus saltatrix, on the continental shelf from Cape Fear to Cape Cod, 1973–1995. M.S. Thesis. State University of New York at Stony Brook).
Entire east coast:
Inshore (ish) strata:
All strata south of ~ Cape Cod
Located in data-raw folder.
# use ecopull function
devtools::install_github("kimberly-bastille/ecopull")
vwind <- ecopull::nc_to_raster(nc = here::here("data-raw/vwnd.10m.2021.nc"),
varname = "vwnd",
show_images = TRUE)
vwind <- raster::rotate(vwind)
raster::plot(vwind)
m_vwind <- raster::mask(x = vwind,
mask = new_shape[new_shape$STRATA > 2000 &
new_shape$STRATA < 8000,2])
mean(m_vwind@data@values, na.rm = TRUE)
## [1] -0.9522257
m_vwind[[1]]
## class : RasterLayer
## dimensions : 30, 20, 600 (nrow, ncol, ncell)
## resolution : 1.031519, 0.6498195 (x, y)
## extent : -80.45845, -59.82808, 30.21661, 49.71119 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +lat_0=40 +lon_0=-77 +x_0=0 +y_0=0 +datum=NAD83 +no_defs +ellps=GRS80 +towgs84=0,0,0
## source : memory
## names : X2021.01.01
## values : 0.747654, 8.843357 (min, max)
## time : 2021-01-01
raster::plot(m_vwind)
Seems like the existing strata are too small, try masking to more strata.
m_vwind2 <- raster::mask(x = vwind,
mask = large_geom)
mean(m_vwind2@data@values, na.rm = TRUE)
## [1] -0.9731909
m_vwind2[[1]]
## class : RasterLayer
## dimensions : 30, 20, 600 (nrow, ncol, ncell)
## resolution : 1.031519, 0.6498195 (x, y)
## extent : -80.45845, -59.82808, 30.21661, 49.71119 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +lat_0=40 +lon_0=-77 +x_0=0 +y_0=0 +datum=NAD83 +no_defs +ellps=GRS80 +towgs84=0,0,0
## source : memory
## names : X2021.01.01
## values : 0.1705055, 8.967381 (min, max)
## time : 2021-01-01
raster::plot(m_vwind2)
This seems like a better geometry.
# use ecopull function
devtools::install_github("kimberly-bastille/ecopull")
uwind <- ecopull::nc_to_raster(nc = here::here("data-raw/uwnd.10m.2021.nc"),
varname = "uwnd",
show_images = TRUE)
uwind <- raster::rotate(uwind)
raster::plot(uwind)
m_uwind2 <- raster::mask(x = uwind,
mask = large_geom)
mean(m_uwind2@data@values, na.rm = TRUE)
## [1] 1.321539
m_uwind2[[1]]
## class : RasterLayer
## dimensions : 30, 20, 600 (nrow, ncol, ncell)
## resolution : 1.031519, 0.6498195 (x, y)
## extent : -80.45845, -59.82808, 30.21661, 49.71119 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +lat_0=40 +lon_0=-77 +x_0=0 +y_0=0 +datum=NAD83 +no_defs +ellps=GRS80 +towgs84=0,0,0
## source : memory
## names : X2021.01.01
## values : 1.038357, 7.00613 (min, max)
## time : 2021-01-01
raster::plot(m_uwind2)
Break into north and south regions at 39N (approximately the bottom of NJ)
Positive v wind = wind is blowing to the north
## names mean_wind min_wind max_wind
## 1 X2021.01.01 8.67782974243164 8.32382583618164 8.96738052368164
## 2 X2021.01.02 0.727199292182922 -0.0607889890670776 1.43823444843292
## 3 X2021.01.03 2.053333568573 1.762610912323 2.250892162323
## 4 X2021.01.04 0.892561662197113 -1.19894230365753 2.63406562805176
## 5 X2021.01.05 -4.73075468540192 -6.87157487869263 -2.68505167961121
## 6 X2021.01.06 2.14590229988098 1.55810940265656 2.86865615844727
## names mean_wind min_wind max_wind
## 1 X2021.01.01 4.19205500284831 0.170505523681641 8.33652114868164
## 2 X2021.01.02 -2.03624478975932 -3.27465629577637 0.00757038593292236
## 3 X2021.01.03 1.81625674565633 0.796790599822998 2.449134349823
## 4 X2021.01.04 3.93146146138509 1.99344062805176 5.49441719055176
## 5 X2021.01.05 -1.92808553377787 -3.53368449211121 -0.494621992111206
## 6 X2021.01.06 -0.980953073501587 -5.24364852905273 1.50732815265656
Positive u wind = wind is blowing to the east
## names mean_wind min_wind max_wind
## 1 X2021.01.01 1.62507553100586 1.03835678100586 2.60866928100586
## 2 X2021.01.02 13.3995737075806 12.3858041763306 14.2393198013306
## 3 X2021.01.03 4.90297966003418 3.98139762878418 5.40229606628418
## 4 X2021.01.04 1.18881988525391 -0.510887145996094 2.53403472900391
## 5 X2021.01.05 -5.39001960754395 -6.41169929504395 -4.32380867004395
## 6 X2021.01.06 -10.1598304748535 -10.3247718811035 -9.93317031860352
## names mean_wind min_wind max_wind
## 1 X2021.01.01 5.45678126017253 2.56863021850586 7.00613021850586
## 2 X2021.01.02 11.8261691411336 9.40728950500488 13.8184213638306
## 3 X2021.01.03 3.47338981628418 2.34663200378418 4.80463981628418
## 4 X2021.01.04 3.07706858317057 2.32114410400391 3.48325347900391
## 5 X2021.01.05 -3.09281908671061 -4.70564460754395 -1.17439460754395
## 6 X2021.01.06 -8.94026629130046 -10.4019203186035 -4.1235990524292
Angles/directions are probably not reliable yet - have to ground truth
| week | region | v mean | u mean | wind magnitude | wind blowing to | coarse angle | coast angle | adjusted angle | new angle | new wind blowing to | longshore wind | crossshore wind | check magnitude |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | North | 3.026 | -0.357 | 3.047 | northwest | 1.453 | 0.785 | 1.688 | 2.474 | up_towards | 2.392 | -1.887 | TRUE |
| 1 | South | 1.578 | 0.631 | 1.699 | northeast | 1.190 | 0.785 | 1.190 | 1.976 | up_towards | 0.670 | -1.562 | TRUE |
| 2 | North | -0.094 | 3.338 | 3.339 | southeast | 0.028 | 0.785 | 6.255 | 0.757 | up_away | 2.427 | 2.294 | TRUE |
| 2 | South | -2.115 | 3.345 | 3.958 | southeast | 0.564 | 0.785 | 5.719 | 0.222 | up_away | 3.861 | 0.870 | TRUE |
| 3 | North | 2.150 | -4.333 | 4.837 | northwest | 0.461 | 0.785 | 2.681 | 3.466 | down_towards | -4.584 | -1.544 | TRUE |
| 3 | South | 2.550 | -1.892 | 3.175 | northwest | 0.932 | 0.785 | 2.209 | 2.995 | up_towards | 3.141 | -0.465 | TRUE |
# use ecopull function
vwind <- ecopull::nc_to_raster(nc = here::here("data-raw/vwnd.10m.mon.mean.nc"),
varname = "vwnd",
show_images = TRUE)
vwind <- raster::rotate(vwind)
raster::plot(vwind)
m_vwind <- raster::mask(x = vwind,
mask = large_geom)
mean(m_vwind@data@values, na.rm = TRUE)
## [1] -0.1615039
m_vwind[[1]]
## class : RasterLayer
## dimensions : 30, 20, 600 (nrow, ncol, ncell)
## resolution : 1.031519, 0.6498195 (x, y)
## extent : -80.45845, -59.82808, 30.21661, 49.71119 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +lat_0=40 +lon_0=-77 +x_0=0 +y_0=0 +datum=NAD83 +no_defs +ellps=GRS80 +towgs84=0,0,0
## source : memory
## names : X1979.01.01
## values : -0.188582, 2.251501 (min, max)
## time : 1979-01-01
raster::plot(m_vwind)
# use ecopull function
uwind <- ecopull::nc_to_raster(nc = here::here("data-raw/uwnd.10m.mon.mean.nc"),
varname = "uwnd",
show_images = TRUE)
uwind <- raster::rotate(uwind)
raster::plot(uwind)
m_uwind <- raster::mask(x = uwind,
mask = large_geom)
mean(m_uwind@data@values, na.rm = TRUE)
## [1] 2.585091
m_uwind[[1]]
## class : RasterLayer
## dimensions : 30, 20, 600 (nrow, ncol, ncell)
## resolution : 1.031519, 0.6498195 (x, y)
## extent : -80.45845, -59.82808, 30.21661, 49.71119 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +lat_0=40 +lon_0=-77 +x_0=0 +y_0=0 +datum=NAD83 +no_defs +ellps=GRS80 +towgs84=0,0,0
## source : memory
## names : X1979.01.01
## values : 0.6709892, 1.908766 (min, max)
## time : 1979-01-01
raster::plot(m_uwind)
Break into north and south regions at 39N (approximately the bottom of NJ)
Positive v wind = wind is blowing to the north
## names mean_wind min_wind max_wind
## 1 X1979.01.01 2.03434200286865 1.6679892539978 2.25150108337402
## 2 X1979.02.01 -2.61082348823547 -3.20551514625549 -2.16903352737427
## 3 X1979.03.01 1.78748390674591 1.65858399868011 1.87497127056122
## 4 X1979.04.01 -2.72354888916016 -3.43132877349854 -1.65548253059387
## 5 X1979.05.01 -0.771568644046783 -0.905924737453461 -0.616295218467712
## 6 X1979.06.01 2.62528488636017 2.42658042907715 2.83055186271667
## names mean_wind min_wind max_wind
## 1 X1979.01.01 0.699965926508109 -0.18858203291893 1.67570722103119
## 2 X1979.02.01 -3.28942049344381 -3.6595470905304 -2.9193127155304
## 3 X1979.03.01 1.42110284566879 0.730975568294525 1.87005698680878
## 4 X1979.04.01 -3.04131368001302 -3.55112051963806 -1.95717525482178
## 5 X1979.05.01 -0.222826617552588 -0.614342093467712 0.191290482878685
## 6 X1979.06.01 3.07070374488831 2.58722496032715 3.56281089782715
Positive u wind = wind is blowing to the east
## names mean_wind min_wind max_wind
## 1 X1979.01.01 1.45269603729248 1.29819440841675 1.57005679607391
## 2 X1979.02.01 2.63577941656113 1.98740470409393 3.57330727577209
## 3 X1979.03.01 4.12896010875702 3.96217894554138 4.27426958084106
## 4 X1979.04.01 -0.956579941511154 -1.30267691612244 -0.527709543704987
## 5 X1979.05.01 0.362831687927246 0.299994617700577 0.479556113481522
## 6 X1979.06.01 3.60882782936096 3.23824834823608 3.94925093650818
## names mean_wind min_wind max_wind
## 1 X1979.01.01 1.38577417532603 0.670989215373993 1.90876638889313
## 2 X1979.02.01 3.35631279945374 1.98196387290955 5.00613355636597
## 3 X1979.03.01 2.57121164798737 1.23079669475555 3.95357894897461
## 4 X1979.04.01 0.616446284453074 -0.510847508907318 1.37352740764618
## 5 X1979.05.01 0.527386673291524 0.396705806255341 0.648249387741089
## 6 X1979.06.01 2.52984784444173 1.16936814785004 3.22574830055237
Angle from north: 0.7853982 (pi / 4)
| names | u mean | Year | DOY | week | region | month | v mean | wind magnitude | ns | ew | wind blowing to | coarse angle | coast angle | adjusted angle | new angle | new wind blowing to | longshore wind | crossshore wind | check magnitude |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1979.01.01 | 1.453 | 1979 | 1979-01-01 | 1 | North | 1 | 2.034 | 2.500 | north | east | northeast | 0.951 | 0.785 | 0.951 | 1.736 | up_towards | 0.411 | -2.466 | TRUE |
| 1979.02.01 | 2.636 | 1979 | 1979-02-01 | 5 | North | 2 | -2.611 | 3.710 | south | east | southeast | 0.781 | 0.785 | 5.503 | 0.005 | up_away | 3.710 | 0.018 | TRUE |
| 1979.03.01 | 4.129 | 1979 | 1979-03-01 | 9 | North | 3 | 1.787 | 4.499 | north | east | northeast | 0.408 | 0.785 | 0.408 | 1.194 | up_away | 1.656 | 4.183 | TRUE |
| 1979.04.01 | -0.957 | 1979 | 1979-04-01 | 13 | North | 4 | -2.724 | 2.887 | south | west | southwest | 1.233 | 0.785 | 4.375 | 5.160 | down_away | -1.249 | 2.603 | FALSE |
| 1979.05.01 | 0.363 | 1979 | 1979-05-01 | 18 | North | 5 | -0.772 | 0.853 | south | east | southeast | 1.131 | 0.785 | 5.152 | 5.937 | down_away | -0.803 | 0.289 | TRUE |
| 1979.06.01 | 3.609 | 1979 | 1979-06-01 | 22 | North | 6 | 2.625 | 4.463 | north | east | northeast | 0.629 | 0.785 | 0.629 | 1.414 | up_away | 0.696 | 4.408 | TRUE |
Alongshore wind (positive = going up the coast)
Across shore wind (positive = going away from the coast)
Try GLMs
##
## Call:
## glm(formula = Recruitment ~ 1, family = "poisson", data = dat)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2827.9 -1506.9 -333.6 856.8 6709.6
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.765e+01 2.558e-05 690127 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 127825358 on 32 degrees of freedom
## Residual deviance: 127825358 on 32 degrees of freedom
## AIC: 127826002
##
## Number of Fisher Scoring iterations: 4
##
## Call:
## glm(formula = eqn, family = "poisson", data = dat)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3061.4 -1022.8 -399.2 1038.8 5513.3
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.771e+01 4.528e-05 391177.00 <2e-16 ***
## crossshore_wind_April_North 2.970e-02 2.195e-05 1352.95 <2e-16 ***
## crossshore_wind_May_North 2.938e-02 2.281e-05 1288.39 <2e-16 ***
## crossshore_wind_April_South -7.030e-02 3.502e-05 -2007.54 <2e-16 ***
## crossshore_wind_May_South -8.964e-04 2.867e-05 -31.26 <2e-16 ***
## longshore_wind_April_North -1.889e-02 1.606e-05 -1176.00 <2e-16 ***
## longshore_wind_May_North 5.135e-02 2.525e-05 2033.39 <2e-16 ***
## longshore_wind_April_South -3.122e-02 1.904e-05 -1639.45 <2e-16 ***
## longshore_wind_May_South -5.242e-02 2.906e-05 -1804.21 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 127825358 on 32 degrees of freedom
## Residual deviance: 102120229 on 24 degrees of freedom
## AIC: 102120889
##
## Number of Fisher Scoring iterations: 4
## df AIC
## mod1 9 102120889
## mod0 1 127826002
## Start: AIC=102120889
## Recruitment ~ crossshore_wind_April_North + crossshore_wind_May_North +
## crossshore_wind_April_South + crossshore_wind_May_South +
## longshore_wind_April_North + longshore_wind_May_North + longshore_wind_April_South +
## longshore_wind_May_South
##
## Df Deviance AIC
## <none> 102120229 102120889
## - crossshore_wind_May_South 1 102121206 102121864
## - longshore_wind_April_North 1 103485979 103486637
## - crossshore_wind_May_North 1 103777080 103777738
## - crossshore_wind_April_North 1 104014316 104014974
## - longshore_wind_April_South 1 104837619 104838277
## - longshore_wind_May_South 1 105340013 105340670
## - longshore_wind_May_North 1 106206436 106207094
## - crossshore_wind_April_South 1 106268297 106268955
##
## Call: glm(formula = Recruitment ~ crossshore_wind_April_North + crossshore_wind_May_North +
## crossshore_wind_April_South + crossshore_wind_May_South +
## longshore_wind_April_North + longshore_wind_May_North + longshore_wind_April_South +
## longshore_wind_May_South, family = "poisson", data = dat)
##
## Coefficients:
## (Intercept) crossshore_wind_April_North
## 17.7140853 0.0297036
## crossshore_wind_May_North crossshore_wind_April_South
## 0.0293823 -0.0702987
## crossshore_wind_May_South longshore_wind_April_North
## -0.0008964 -0.0188858
## longshore_wind_May_North longshore_wind_April_South
## 0.0513523 -0.0312168
## longshore_wind_May_South
## -0.0524248
##
## Degrees of Freedom: 32 Total (i.e. Null); 24 Residual
## Null Deviance: 127800000
## Residual Deviance: 102100000 AIC: 102100000
## Start: AIC=127826002
## Recruitment ~ 1
##
## Df Deviance AIC
## + crossshore_wind_May_North 1 120207385 120208031
## + longshore_wind_April_North 1 121309646 121310291
## + longshore_wind_April_South 1 123606575 123607221
## + longshore_wind_May_North 1 125276684 125277330
## + crossshore_wind_April_South 1 126855076 126855721
## + crossshore_wind_April_North 1 126889766 126890412
## + crossshore_wind_May_South 1 127720287 127720933
## + longshore_wind_May_South 1 127750181 127750827
## <none> 127825358 127826002
##
## Step: AIC=120208031
## Recruitment ~ crossshore_wind_May_North
##
## Df Deviance AIC
## + longshore_wind_April_North 1 111504260 111504908
## + longshore_wind_April_South 1 111526114 111526762
## + crossshore_wind_May_South 1 119020058 119020706
## + longshore_wind_May_South 1 119116272 119116920
## + crossshore_wind_April_South 1 119196488 119197136
## + longshore_wind_May_North 1 120129366 120130014
## + crossshore_wind_April_North 1 120149267 120149915
## <none> 120207385 120208031
##
## Step: AIC=111504908
## Recruitment ~ crossshore_wind_May_North + longshore_wind_April_North
##
## Df Deviance AIC
## + longshore_wind_April_South 1 109603619 109604269
## + crossshore_wind_May_South 1 110115401 110116051
## + longshore_wind_May_North 1 111016394 111017044
## + crossshore_wind_April_South 1 111028037 111028687
## + longshore_wind_May_South 1 111263527 111264177
## + crossshore_wind_April_North 1 111311578 111312228
## <none> 111504260 111504908
##
## Step: AIC=109604269
## Recruitment ~ crossshore_wind_May_North + longshore_wind_April_North +
## longshore_wind_April_South
##
## Df Deviance AIC
## + crossshore_wind_May_South 1 108061158 108061810
## + crossshore_wind_April_South 1 108632803 108633455
## + longshore_wind_May_South 1 109144090 109144742
## + longshore_wind_May_North 1 109317085 109317737
## + crossshore_wind_April_North 1 109567787 109568439
## <none> 109603619 109604269
##
## Step: AIC=108061810
## Recruitment ~ crossshore_wind_May_North + longshore_wind_April_North +
## longshore_wind_April_South + crossshore_wind_May_South
##
## Df Deviance AIC
## + crossshore_wind_April_South 1 107300919 107301573
## + longshore_wind_May_North 1 107501383 107502037
## + longshore_wind_May_South 1 107970266 107970920
## + crossshore_wind_April_North 1 108054450 108055104
## <none> 108061158 108061810
##
## Step: AIC=107301573
## Recruitment ~ crossshore_wind_May_North + longshore_wind_April_North +
## longshore_wind_April_South + crossshore_wind_May_South +
## crossshore_wind_April_South
##
## Df Deviance AIC
## + crossshore_wind_April_North 1 106429796 106430451
## + longshore_wind_May_North 1 106445315 106445971
## + longshore_wind_May_South 1 107114678 107115334
## <none> 107300919 107301573
##
## Step: AIC=106430451
## Recruitment ~ crossshore_wind_May_North + longshore_wind_April_North +
## longshore_wind_April_South + crossshore_wind_May_South +
## crossshore_wind_April_South + crossshore_wind_April_North
##
## Df Deviance AIC
## + longshore_wind_May_North 1 105340013 105340670
## + longshore_wind_May_South 1 106206436 106207094
## <none> 106429796 106430451
##
## Step: AIC=105340670
## Recruitment ~ crossshore_wind_May_North + longshore_wind_April_North +
## longshore_wind_April_South + crossshore_wind_May_South +
## crossshore_wind_April_South + crossshore_wind_April_North +
## longshore_wind_May_North
##
## Df Deviance AIC
## + longshore_wind_May_South 1 102120229 102120889
## <none> 105340013 105340670
##
## Step: AIC=102120889
## Recruitment ~ crossshore_wind_May_North + longshore_wind_April_North +
## longshore_wind_April_South + crossshore_wind_May_South +
## crossshore_wind_April_South + crossshore_wind_April_North +
## longshore_wind_May_North + longshore_wind_May_South
##
## Call: glm(formula = Recruitment ~ crossshore_wind_May_North + longshore_wind_April_North +
## longshore_wind_April_South + crossshore_wind_May_South +
## crossshore_wind_April_South + crossshore_wind_April_North +
## longshore_wind_May_North + longshore_wind_May_South, family = "poisson",
## data = dat)
##
## Coefficients:
## (Intercept) crossshore_wind_May_North
## 17.7140853 0.0293823
## longshore_wind_April_North longshore_wind_April_South
## -0.0188858 -0.0312168
## crossshore_wind_May_South crossshore_wind_April_South
## -0.0008964 -0.0702987
## crossshore_wind_April_North longshore_wind_May_North
## 0.0297036 0.0513523
## longshore_wind_May_South
## -0.0524248
##
## Degrees of Freedom: 32 Total (i.e. Null); 24 Residual
## Null Deviance: 127800000
## Residual Deviance: 102100000 AIC: 102100000